class BaseGui extends Gui {

  data := {
    x: 0,
    y: 0,
    sizeW: 0,
    sizeH: 0,
    zoomLevel: 0,
    fullScreen: 0,
  }


  X(v := unset) => IsSet(v) ? (this.data.x := v, this) : this.data.x
  Y(v := unset) => IsSet(v) ? (this.data.y := v, this) : this.data.y
  SizeW(v := unset) => IsSet(v) ? (this.data.sizeW := v, this) : this.data.sizeW
  SizeH(v := unset) => IsSet(v) ? (this.data.sizeH := v, this) : this.data.sizeH
  Border(v := unset) => IsSet(v) ? (this.data.border := v, this) : this.data.border
  HasTimestamp(v := unset) => IsSet(v) ? (this.data.hasTimestamp := v, this) : this.data.hasTimestamp
  ZoomLevel(v := unset) => IsSet(v) ? (this.data.zoomLevel := v, this) : this.data.zoomLevel
  CreateTime(v := unset) => IsSet(v) ? (this.data.createTime := v, this) : this.data.createTime
  FullScreen(v := unset) => IsSet(v) ? (this.data.fullScreen := v, this) : this.data.fullScreen

  __New(opt := '') {
    super.__New(opt)
    this.ZoomLevel(StretchRatio.normal).FullScreen(0)
  }
}